package com.yanyuan.algorithm.sort;

/**
 * @Description 归并排序测试类
 * @Author yanyuan
 * @Date 10:02 2020/4/28
 * @Version 1.0
 **/
public class MergeTest {

    public static void main(String[] args) {
        //两个有序数组合并
        int[] arrA = {1, 8, 9, 23, 25};
        int[] arrB = {3, 4, 7, 12};
        //将数组进行合并，得到一个新的数组
        int[] arrC = merge(arrA, arrB);
        for (int val: arrC){
            System.out.print(val + "\t");
        }
    }

    private static int[] merge(int[] arrA, int[] arrB) {
        int[] tempArr = new int[arrA.length + arrB.length];
        //数组下标
        int indexA = 0; //数组A下标
        int indexB = 0;//数组B下标
        int tempIndex = 0;//临时数组下标

        //待排序数组最小值的比较，最小的放到tempArr里面
        while (indexA < arrA.length && indexB < arrB.length){
            if(arrA[indexA] <= arrB[indexB]){
                tempArr[tempIndex++] = arrA[indexA++];//先赋值，再把下标往后移
            }else {
                tempArr[tempIndex++] = arrB[indexB++];
            }
        }

        while (indexA < arrA.length) tempArr[tempIndex++] = arrA[indexA++];
        while (indexB < arrB.length) tempArr[tempIndex++] = arrB[indexB++];

        //两个数组长度不等，其中数组比较完毕，则剩下的数据, 依次放入归并结果数组tempp
        return tempArr;
    }
}
